export default {
  //命名空间作用:能够让辅助函数,指定模块,进行属性映射
  namespaced: true,
  state: {
      name: "购物车Cart",
      carts: []
  },
  getters: {},
  actions: {
      //主要目的,为了学会不同模块之间,操作mutation和action
      ADD_TO_CART(context, payload) {
          // console.log(context)
          // console.log(payload)
          context.commit('SET_CART', payload);
          //触发其它模块的mutation
          context.commit('product/DECREASE_INVENTORY', payload, { root:true })
      },
      //移出购物车
      REMOVE_CART(context, payload) {
          //自己的数量-1

          //product模块中的products对应的数据数量+1

          // console.log(payload)
          context.commit('DECREASE_CART', payload)

          //触发product模块中的mutation
          context.commit('product/INCREASE_INVENTORY', payload, { root:true })
      }
  },
  getters: {
      total(state) {
          return (state.carts.reduce((total, item) => {
              return total += item.count * item.price
          }, 0)).toFixed(2)
      }
  },
  mutations: {
      LOG(state) {
          console.log(state)
      },
      //加入到购物车的方法
      SET_CART(state, payload) {
          //1.点击加入购物车按钮,获取当前点击的这条数据

          //2.加入到cart模块中的carts数组中

          //3.判断如果carts数组中存在这条数据,让数量+1

          //4.如果不存在,那么就直接加入到数组中

          let target = state.carts.find(item => item.id === payload.id)

          if (target) {
              //carts里面有这条数据,让数量+1
              target.count++
          } else {
              //carts没有这条数据
              let obj = {
                  id: payload.id,
                  title: payload.title,
                  price: payload.price,
                  count: 1
              }
              //添加进入购物车数组
              state.carts.push(obj)
          }


      },
      //让数量-1
      DECREASE_CART(state, payload) {
          //根据传递过来payload的id,对carts进行查找,查找到carts中数据的id和payload的id相同的,那么让数据的count-1
          let target = state.carts.find(item => item.id === payload.id)

          if (target) {
              target.count--
          }

          //判断如果数量等于0,那么需要从carts数组中过滤掉
          if (target.count === 0) {
              state.carts = state.carts.filter(item => item.id !== target.id)
          }
      }
  }
}
